import java.io.IOException;
import java.util.StringTokenizer;

/**
 * @author Jonas Jeske
 * @author Felipe Wilke
 *
 */
public class Main {

	public static void main(String args[]) {

		//variaveis para manipulacao do campo minado
		int numeroColunas, numeroLinhas, indexLinhas, indexColunas;
		int contadorCampoMinado = 0;
		StringTokenizer linhaStringTokenizer;
		String linhaDigitada, linhaBuffer;
		char[][] campoMinado;
		StringBuffer sb;

		// enquanto for verdadeiro
		while (true) {
			// busca a linha digitada
			linhaDigitada = retornaLinhaDigitada(2500);

			// transforma em tokens
			linhaStringTokenizer = new StringTokenizer(linhaDigitada);

			// pega os primeiros elementos, referente ao numero de linhas e colunas
			numeroLinhas = Integer.parseInt(linhaStringTokenizer.nextToken());
			numeroColunas = Integer.parseInt(linhaStringTokenizer.nextToken());

			// se forem iguais a zero, sai fora
			if (numeroColunas == 0 && numeroLinhas == 0) {
				break;
			}
			// se for negativo, ou maior que 100, nao faz nada e le nova linha
			if (!(numeroColunas < 0 || numeroLinhas < 0 || numeroLinhas > 100
					|| numeroColunas > 100 || numeroColunas == 0 || numeroLinhas == 0)) {

				// senao incrementa contador de campos minado
				contadorCampoMinado++;

				// cria um novo campo minado com o numero de linhas e colunas lidos
				campoMinado = new char[numeroLinhas][numeroColunas];

				// para cada linha do campo minado
				for (indexLinhas = 0; indexLinhas < numeroLinhas; indexLinhas++) {

					// le a linha
					linhaDigitada = retornaLinhaDigitada(3000);

					// transforma em tokens
					linhaStringTokenizer = new StringTokenizer(linhaDigitada);

					// linha eh o proximo token
					linhaBuffer = linhaStringTokenizer.nextToken();

					// para cada coluna da linha
					for (indexColunas = 0; indexColunas < numeroColunas; indexColunas++) {

						//insere no campo minado o valor lido, "*" ou "."
						campoMinado[indexLinhas][indexColunas] = linhaBuffer
								.charAt(indexColunas);
					}
				}

				//sb armazena a string de saida
				sb = new StringBuffer();
				
				//insere nova linha, entre dois campos minados, regra imposta pelo problema
				if (contadorCampoMinado > 1) {
					sb.append("\n");
				}

				//insere o cabecalho do campo minado
				sb.append("Field #" + contadorCampoMinado + ":");

				//percorre o campo minado, populando a string de saida com o numero de bombas adjacentes
				//a cada elemento docampo minado, logo,
				//para cada linha
				for (indexLinhas = 0; indexLinhas < numeroLinhas; indexLinhas++) {

					//insere quebra de linha
					sb.append("\n");

					// para cada coluna
					for (indexColunas = 0; indexColunas < numeroColunas; indexColunas++) {

						//se o elemento for bomba, insere a bomba na string de saida
						if (campoMinado[indexLinhas][indexColunas] == '*') {
							sb.append("*");

						// senao, insere valor calculado do numero de
						// bombas adjacentes do elemento no strig de saida
						} else {
							sb.append(getNumeroBombas(campoMinado, indexLinhas,
									indexColunas));
						}
					}
				}

				//imprime a string de saida do campo minado
				System.out.print(sb.append("\n").toString());

			}
		}
	}

	/**
	 * Retorna o numero de bombas do elemento do campo minado correspondente a indexLinha e indexColuna
	 * @param campoMinado
	 * @param indexLinha
	 * @param indexColuna
	 * @return
	 */
	static int getNumeroBombas(char[][] campoMinado, int indexLinha, int indexColuna) {
		
		//contador do numero de bombas
		int numeroBombas = 0;

		// para as 8 posicoes adjacentes do elemento com indexLinha e indexColuna, 
		//verifica se existe a bomba e incrementa o contador do numero de bombas
		try {
			if (campoMinado[indexLinha][indexColuna + 1] == '*') {
				numeroBombas++;
			}
		} catch (Exception e) {
			// nao faz nada
		}
		try {
			if (campoMinado[indexLinha][indexColuna - 1] == '*') {
				numeroBombas++;
			}
		} catch (Exception e) {
			// nao faz nada
		}
		try {
			if (campoMinado[indexLinha + 1][indexColuna] == '*') {
				numeroBombas++;
			}
		} catch (Exception e) {
			// nao faz nada
		}
		try {
			if (campoMinado[indexLinha - 1][indexColuna] == '*') {
				numeroBombas++;
			}
		} catch (Exception e) {
			// nao faz nada
		}
		try {
			if (campoMinado[indexLinha - 1][indexColuna - 1] == '*') {
				numeroBombas++;
			}
		} catch (Exception e) {
			// nao faz nada
		}
		try {
			if (campoMinado[indexLinha - 1][indexColuna + 1] == '*') {
				numeroBombas++;
			}
		} catch (Exception e) {
			// nao faz nada
		}
		try {
			if (campoMinado[indexLinha + 1][indexColuna - 1] == '*') {
				numeroBombas++;
			}
		} catch (Exception e) {
			// nao faz nada
		}
		try {
			if (campoMinado[indexLinha + 1][indexColuna + 1] == '*') {
				numeroBombas++;
			}
		} catch (Exception e) {
			// nao faz nada
		}

		return numeroBombas;
	}

	/**
	 * Retorna a linha digitada no input.
	 * @param tamanhoMaximo
	 * @return
	 */
	static String retornaLinhaDigitada(int tamanhoMaximo) {
		
		//armazena em um array o input
		byte linha[] = new byte[tamanhoMaximo];
		int indexCaracterNaLinha = 0, caracterDigitado = -1;
		try {
			//enquanto nao atingir o numero max de caracteres
			while (indexCaracterNaLinha < tamanhoMaximo) {
				
				//armazena o caracter digitado
				caracterDigitado = retornaCaracterDigitado();
				
				//se for menor que zero ou fim de linha, para de ler
				if ((caracterDigitado < 0) || (caracterDigitado == '\n')){
					break;
				}
				
				//armazena o caracter digitado na linha
				linha[indexCaracterNaLinha++] += caracterDigitado;
			}
		} catch (IOException e) {
			return (null);
		}

		//se for caracter invalido, retorna zero
		if ((caracterDigitado < 0) && (indexCaracterNaLinha == 0)){
			return (null); // eof
		}
		
		//senao retorna a string lida
		return (new String(linha, 0, indexCaracterNaLinha));
	}

	/**
	 * Retorna o caracter digitado.
	 * @return
	 * @throws IOException
	 */
	static int retornaCaracterDigitado() throws IOException {
		return System.in.read();
	}
}